package controles;

import java.util.*;
import juego.Escenario;
import objetos.aeronaves.Enemigo;

/*
 * Clase que controla el comportamiento de los enemigos durante la simulaci�n.
 * Hace que disparen, y chequea si deben huir.
 */
public class ControlEnemigos implements Control {

	public void ejecutar() {
		this.queDisparen(Escenario.getInstance().getEnemigos());
		this.debenHuir(Escenario.getInstance().getEnemigos());
	}

	public void queDisparen(ArrayList<Enemigo> enemigos) {
		Enemigo enemigo;
		Iterator<Enemigo> iter = enemigos.iterator();

		Enemigo guia = Escenario.getInstance().getAvionGuia();
		if (guia != null) {
			if (debeDisparar(guia)) {
				guia.disparar();
			}
		}
		while (iter.hasNext()) {
			enemigo = iter.next();
			if (!enemigo.estaHuyendo() && debeDisparar(enemigo)) {
				/*
				 * En el metodo disparar las balas son agregadas a la instancia
				 * de nivel
				 */
				enemigo.disparar();
			}
		}
	}

	private boolean debeDisparar(Enemigo enemigo) {
		Random rdm = new Random();
		int num = rdm.nextInt(72);
		return num < 5;
	}

	public void hacerHuir(ArrayList<Enemigo> enemigos) {
		Iterator<Enemigo> iter = enemigos.iterator();
		while (iter.hasNext()) {
			Enemigo enemigo = iter.next();
			enemigo.prepararParaHuida();
		}
	}

	public boolean debenHuir(ArrayList<Enemigo> enemigos) {
		if (this.hayAvionGuia()) {
			this.hacerHuir(enemigos);
			return true;
		}
		return false;
	}

	private boolean hayAvionGuia() {
		return Escenario.getInstance().getAvionGuia() != null;
	}

}
